package net.javamine.util;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

/**
 * 编码工具类
 * @author <a href="mailto: java_lht@163.com">Lht</a>
 * @since 2012-5-24 1.create
 */
public class EncodeUtils {
	
	private static Logger log = Logger.getLogger(EncodeUtils.class);
	
	/**
	 * 判断字符串的字符编码是否与需要比较的字符编码相符
	 * @param str 字符串
	 * @param encode 字符编码 UTF-8 GBK GB2312...
	 * @return 是/否
	 */
	public static boolean isStringEncoding(String str, String encode) {
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				return true;
			} else {
				return false;
			}
		} catch (Exception e) {
			ExceptionUtils.getExceptionMessage(log, e);
			return false;
		}
	}
	
	/**
	 * 获取当前字符串的编码格式
	 * @param str 需要获取编码格式的字符串
	 * @return 当前的编码格式
	 */
	public static String getEncoding(String str) {
		try {
			List<String> encodeList = new ArrayList<String>();
			encodeList.add("ISO-8859-1");
			encodeList.add("UTF-8");
			encodeList.add("GBK");
			encodeList.add("GB2312");
			for (String encode : encodeList) {
				if (str.equals(new String(str.getBytes(encode), encode))) {
					return encode;
				} 
			}
		} catch (Exception e) {
			ExceptionUtils.getExceptionMessage(log, e);
			return null;
		}
		return null;
	}
	
	/**
	 * 字符串编码转换
	 * @param str 需要转换编码的字符串
	 * @param targetEncode 需要转换成何种编码格式 UTF-8 GBK GB2312...
	 * @param preEncode 字符串原来的编码格式 
	 * @return
	 */
	public static String transferEncoding(String str, String targetEncode, String preEncode) {
		try {
			return new String(str.getBytes(targetEncode), preEncode);
		} catch (Exception e) {
			ExceptionUtils.getExceptionMessage(log, e);
			return null;
		}
	}
}
